Online applications are now routinely used to conduct business transactions. Online applications with easy-to-understand graphic user interface can increase the efficiency of communication between the companies and the users or customers, and reduce chance of making mistake. By using online applications, companies are able to increase business productivity, reduce business expenses, and save staff time. Companies use online applications to (1) conduct modeling and simulation, (2) distribute company information to employees, their customers, investors, and the general public, (3) control their systems from a remote client, (4) monitor internal or external data such as market trend critical to their business success, (5) manage their database systems or data warehouse, and (6) deliver customer services such as bank account access, issuing of Return Material Authorization number, product registration, and survey of customer satisfaction.
A web page is generated by a server and rendered in a client computer connected to the server using a communication protocol such as HTTP or FTP. The client computer running a browser with a unique IP address first sends a request through Internet or private network to the server, requesting a web page. The request contains the URL of the web page and browser-specific information. The server then passes the URL and the browser-specific information to the JSP/Servlet or CGI in the server as parameters, generates the web page for the client computer, and sends the web page to the client computer for rendering.
Web pages can be generated dynamically because the JSP/Servlet can get data from an external source at the time of creating the web page. Nowadays, store inventories, merchandize prices, customer contacts, the data on weather conditions for a city, and company stock prices may be kept in database servers such as Content Management Systems (“CMS”), RDBMS or Sequel severs which are housed in workstation, mainframe computer or computer clusters. Those servers can also be housed in the same computers hosting the web servers. If those database servers are in different computers, the web server computers can connect to the database computers by Internet or private network to retrieve the latest information. If a web page is to show the stock price of a company, and if the stock price of the company is maintained within the same computer, the JSP/Servlet can get the latest stock price for the company when it generates the web page. If the stock price is maintained in a different computer, the JSP/Servlet can get the latest stock price from that computer by network connection.
Moreover, a web page often comprises plural graphic components, non-graphic component, and even embedded video components. The web page may include associated files such as image files, JavaScript files, and video files by reference even though those files may be stored in different locations. These components collaborate with each other in action and/or communicate with each other in a way comparable to the GUI application on desktop computers. Online application is better term for referring to dynamic web pages.
Online application and all of the components may be coded in any XML graphic languages such as Microsoft's XAML, X3D, W3C's SVG, XHTML/DHTML, Adobe's MXML/Flash, and JavaScript code. The code listings of a web page may be placed in different locations as long as they are properly referenced by the component. Detailed code statements for rendering a given graphic component depends upon its platform, which is defined by machine hardware, operating system, and browser. The specific code statements for a shopping cart and shopping items running in an Apple computer are different from those running in an Intel Machine. Some platforms may require that XML instructions be translated (e.g. Adobe's MXML to Flash) or compiled (e.g. Microsoft's XAML to executable) into an executable program before the application can run under the platform.
It is hard to write bare XML instructions for data-driven large custom graphic components. When an online application has many components, the components may need to interact with each other and exchange data among them during execution. Therefore, it is even harder to create graphics-intensive online applications that contain many graphic components that can interact with each other intelligently.
Large online applications often comprise many software components that need to be updated (e.g. redesigned to implement more functionality or features) as Internet technologies evolve, and business needs change.
An attempt to reduce programming burden is revealed in the commercial distribution of special Java class libraries. The libraries comprise a collection of component code generators (“CCG”) for GUI components, which are of Java class, respectively for popular graphic components such as charts, trees, menus and graphs. One GUI CCG is designed for each commonly known graphic component. For example, one GUI class is implemented for Pie chart and another GUI Class is implemented for Line chart. All CCGs are coded in a language supported in the web server, and can run in the server like any java program. For instance, when a CCG for a pie chart is instantiated and initialized, the object generates the code for a pie chart, which may be rendered under an appropriate platform such as DHTML, SVG or Adobe's Flash. Before the CCG object is called to generate the code, the object may be customized based on user preferences and initialized with the newest application data obtained from database maintained in the server computer or from an external data source. Therefore, relative percentages in the pie chart will reflect the latest information of interest.
While CCGs are commercially available there is no workable mechanism to properly assemble plural CCGs to form a proper container CCG for generating a functional component. An application often needs two or more components. If two components X and Y do not need to collaborate with each other and do not exchange data, it is possible to generate the two components by calling two CCGs in sequence. However, if component X needs to call component Y upon an event such as user's click on mouse, time expiration, and change of value or state, it would be necessary to manually add some code statements to establish necessary collaboration. Likewise, if component X needs to use data from component Y, addition of code and modification of existing code is necessary.
The extra code statements must be added and the modification of existing code statements must be made before the rendering of the online application. Conceptually, the only way of developing a workable online application would be to collect the application code for both component and then adding necessary code and modifying the existing code. This may create a different problem. Since the component code showing graphic image may carry the real time information in the image itself, a delay in sending out the application code to the client computer may reduce the value of the information. It is harder to modify the values used in the graphic image according to the latest database value manually. Moreover, if plural components with different levels of hierarchy are built manually, it would be difficult and time-consuming. Moreover, this also requires more storage space for complex applications.
Due to the difficulty described above, companies often spend more money on maintaining online applications than building/acquiring their first releases. Despite the spending, the results are often unsatisfactory, and the applications often end up in degraded code structure. If Object Oriented Programming (“OOP”) is used to build the application, each CCG that generates large component's code usually uses many objects.
In reality, it is required that online application is updated quickly to meet the evolving business needs. It is usually error-prone in part due to the nature of work and in part because the developers are under time constraints to update the application. It takes considerable effort to remove a large container component, and the developers need to understand the internal design and code dependencies between different objects within the code of component's CCG, the distribution of the code sections of the objects among many files, and the interactions between the objects.
Therefore, there is a need for finding a better method to build components using CCGs more efficiently. There is a need for a simple process in the server for generating application code for subcomponents and for adding additional application code that allows the subcomponents to interact and communicate with each other and with the container component. It is desirable to have a mechanism to use a container component as a subcomponent in another larger container component or to allow the container component to interact and communicate with the larger component in the online application.